package udp;


import java.io.*;
import java.net.*;
import javax.swing.JFileChooser;

public class ClienteUDP {

    static int PORTA = 5000;
    static String caminho = System.getProperty("user.dir")+"\\src";
    static String hostIP = "127.0.0.1"; //ou localhost
    
    public static void main(String args[]) throws Exception {

        System.out.println("ClienteUDP executando:");
        
        //Socket UDP
        DatagramSocket socketUDP = new DatagramSocket();
        InetAddress IPServidor = InetAddress.getByName("127.0.0.1");

        
        BufferedReader entradaUsuario =
                        new BufferedReader(
                            new InputStreamReader(System.in));

        String entrada = entradaUsuario.readLine(); //teste1.txt
        byte[] msgEnvio = entrada.getBytes();

        //Nosso datagrama
        Datagrama dat = new Datagrama((byte) 0, msgEnvio);

        //datagrama UDP (pacote) de envio
        DatagramPacket datagrama = 
                new DatagramPacket(dat.getPacote(),
                                    dat.getPacote().length,
                                    IPServidor, PORTA);

        
        socketUDP.send(datagrama);
        long timeInicial = System.currentTimeMillis();
        
        
        System.out.println("Arquivo " + entrada + " solicitado em: " + 
                        IPServidor.getHostAddress() + "\n"
                        + "Porta: " + PORTA);


        System.out.println("---------Aguardando pela resposta do servidor...");
        byte[] bufferResposta = new byte[1025];

        //Datagrama UDP a ser recebido
        DatagramPacket datagramaResposta = 
                    new DatagramPacket(bufferResposta,
                                       bufferResposta.length);

        //AGUARDANDO A RESPOSTA DO SERVIDOR
        socketUDP.receive(datagramaResposta);
        long RTT = System.currentTimeMillis() - timeInicial;
        System.out.println("RTT: "+ RTT + " ms");
        
        //Devemos montar o nosso datagrama!             
        byte[] bufferRespostaSemCab = new byte[1024];
        System.arraycopy(bufferResposta, 0, bufferRespostaSemCab, 
                          0, bufferResposta.length - 1);
                                                   //cabecalho //dados
       
        Datagrama datResposta = 
                        new Datagrama(bufferResposta[1024], 
                                      bufferRespostaSemCab);

        byte[] dadosPacoteRecebido = datResposta.getDados(); //"teste.txt";
        
        
        
        //VERIFICAÇÃO DO CABEÇALHO
        if (datResposta.getCabecalho() == 0) {
            //Arquivo encontrado!
            //para salvar
            JFileChooser chooser = new JFileChooser(caminho);
            chooser.showSaveDialog(null);
            FileOutputStream in = new FileOutputStream(chooser.getSelectedFile());

            //////////////////////////////
            //salva no arquivo
            in.write(dadosPacoteRecebido);
            
        } else {

            //Arquivo não encontrado            
            String resposta = new String(dadosPacoteRecebido);           
            System.out.println("ERRO! DADOS de resposta: " + resposta);

        }

        
        //Fecha o socket
        socketUDP.close();
        System.out.println("Socket Fechado.");

    }
}







/*  CLIENTE UDP PARA ENVIO DE STRING
         * BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        DatagramSocket clientSocket = new DatagramSocket();
        InetAddress IPAddress = InetAddress.getByName("localhost");
        byte[] sendData = new byte[1024];
        byte[] receiveData = new byte[1024];
        String sentence = inFromUser.readLine();
        sendData = sentence.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
        clientSocket.send(sendPacket);
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        clientSocket.receive(receivePacket);
        String modifiedSentence = new String(receivePacket.getData());
        System.out.println("FROM SERVER:" + modifiedSentence);
        clientSocket.close();
        * */